package com.project.mapper;

import com.project.bean.CutPageBean;
import com.project.bean.StudentBean;
import org.apache.ibatis.annotations.Param;

import java.security.PublicKey;
import java.time.LocalDate;
import java.util.List;

/**学生持久层接口*/
public interface IStudentMapper {

    /**
     * 添加学生返回学生的id
     * @param stu 要添加的学生对象
     * @return 返回新增学生的id
     */
    public int add(StudentBean stu);

    /**
     * 添加学生集合
     * @param stuList 要添加的学生集合
     */
    public void addList(@Param("stuList") List<StudentBean> stuList);

    /**根据id删除学生*/
    public void del(int id);

    /**
     * 删除学生数组
     * @param idArray 被选中的学生对象的id数组
     */
    public void delMore(@Param("idArray") int[] idArray);

    /**根据编号修改学生生日*/
    public void update(@Param("id") int id,
                       @Param("birthday") LocalDate birthday);

    /**查询所有学生*/
    public List<StudentBean> findAll();
    /**
     * 根据学生id查询学生
     * @param id 学生id
     * @return 返回学生对象
     */
    public StudentBean findById(int id);

    /**
     * 根据学生姓名模糊查询
     * @param name 学生姓名
     * @return 返回符合条件的学生集合
     */
    public List<StudentBean> findByName(String name);

    /**
     * 根据学生姓名，起始生日结束生日日期模糊动态查询学生
     * @param name 姓名
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 返回符合条件的学生集合
     */
    public List<StudentBean> findByItem(
            @Param("name") String name,
            @Param("startDate") LocalDate startDate,
            @Param("endDate") LocalDate endDate);

    /**
     * 统计学生人数
     * @return 返回学生人数
     */
    public int countStu();

    /**
     * 分页查询所有记录
     * @param start 起始记录条数
     * @param pageSize 每页显示记录条数
     * @return 返回当前页显示的数据
     */
    public List<StudentBean> cutAll(@Param("start") int start,
                                    @Param("pageSize") int pageSize);

    /**
     * 动态分页查询
     * @param start 起始记录数
     * @param pageSize 每页显示的条数
     * @param name 学生姓名
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 返回符合条件的分页对象
     */
    public List<StudentBean> cutByItem(@Param("start") int start,
                                              @Param("pageSize") int pageSize,
                                              @Param("name") String name,
                                              @Param("startDate") LocalDate startDate,
                                              @Param("endDate") LocalDate endDate);

    /**
     * 按条件统计总记录数。根据条件变化而变化
     * @param name 姓名
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 返回符合条件的记录的总条数
     */
    public int cutByCount(@Param("name") String name,
                          @Param("startDate") LocalDate startDate,
                          @Param("endDate") LocalDate endDate);
}
